home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2011 January / SAN CD 1-2011 CD-ROM 68.iso / pc / issueMedia / Software / AviStack2 / as2pi_tpl__define.pro next >
Encoding:
Text File  |  2010-07-12  |  15.0 KB  |  540 lines

  1.  
  2.  
  3. ;------Cleanup-----------------------------------------
  4. ;
  5. ;  Cleanup method of the object.
  6. ;
  7. Pro AS2PI_tpl::Cleanup
  8.  
  9.   ;Save widget geometry and display parameters
  10.   self->Settings, /Save
  11.  
  12.   ;Free pointers (add new pointers here)
  13.   Ptr_Free, self.lang
  14.   
  15.  
  16. End
  17. ;------------------------------------------------------
  18.  
  19.  
  20.  
  21. ;------Settings-----------------------------------------------------------------
  22. ;
  23. ;    Method to save and restore basic object settings.
  24. ;    ->Settings, inis, /Save - pass back settings via inis
  25. ;    ->Settings, inis, /Restore - store external settings
  26. ;    ->Settings, /Save - saves settings to default file (on destruction of self)
  27. ;    ->Settings, /Restore - restores settings from default file (on initialization of self)
  28. ;
  29. Pro AS2PI_tpl::Settings, inis, Save = Save, Restore = Restore
  30.  
  31.   ;If inis is present, AviStack wants to save or store project data
  32.   NoSaveData = Arg_Present(inis) EQ 0
  33.  
  34.   ;Dummy data structure
  35.   inis0 = {id: 'AS2PI_tpl', $
  36.            color:   0, $
  37.            fit:     0, $
  38.            xOffset: 0L, $
  39.            yOffset: 0L}
  40.  
  41.   ;Tag names of the structure for comparison (which are present in the restored data?)
  42.   Tags0 = Tag_Names(inis0)
  43.  
  44.   ;Save settings (if inis Argument is present, inis will be passed back)
  45.   If Keyword_Set(Save) Then Begin
  46.  
  47.     inis0.color    = self.color
  48.     inis0.fit      = self.fit
  49.  
  50.     If Widget_Info(self.tlb, /Valid_ID) Then Begin
  51.       geo = Widget_Info(self.tlb, /Geometry)
  52.       inis0.xOffset = geo.xOffset
  53.       inis0.yOffset = geo.yOffset
  54.     EndIf Else Begin
  55.       inis0.xOffset = self.xOffset
  56.       inis0.yOffset = self.yOffset
  57.     EndElse
  58.  
  59.     inis = inis0
  60.  
  61.     ;Store only if no settings pass back is desired
  62.     If NoSaveData Then Save, File = self.ini, inis
  63.  
  64.   EndIf
  65.  
  66.   ;Load settings (either implement settings passed on by inis or restore file)
  67.   If Keyword_Set(Restore) Then Begin
  68.  
  69.     ;Check settings file. Does it contain the "inis" structure?
  70.     If NoSaveData Then Begin
  71.       If ~ReadSaveFile(self.ini, inis = inis) Then inis = inis0
  72.     EndIf
  73.  
  74.     Tags = Tag_Names(inis)
  75.     
  76.     If Total(Tags EQ 'COLOR')    Then self.color    = inis.color    Else self.color    = inis0.color
  77.     If Total(Tags EQ 'FIT')      Then self.fit      = inis.fit      Else self.fit      = inis0.fit
  78.     If Total(Tags EQ 'XOFFSET')  Then self.xOffset  = inis.xOffset  Else self.xOffset  = inis0.xOffset
  79.     If Total(Tags EQ 'YOFFSET')  Then self.yOffset  = inis.yOffset  Else self.yOffset  = inis0.yOffset
  80.  
  81.   EndIf
  82.  
  83. End
  84. ;--------------------------------------------------------------------------------------------------------------
  85.  
  86.  
  87.  
  88. ;----ClearData----------------------------
  89. ;
  90. ;  Method resets pointers to free memory
  91. ;  Use this methd when you unmap the TLB
  92. ;
  93.  
  94. Pro AS2PI_tpl::ClearData
  95.  
  96. End
  97. ;-----------------------------------------
  98.  
  99.  
  100.  
  101.  
  102. ;----Finished--------------------------------------------------------------------
  103. ;
  104. ;  Method to notify AviStack2 that processing is finished.
  105. ;  Successfully: ok=1 else ok = 0
  106. ;
  107.  
  108. Pro AS2PI_tpl::Finished, ok
  109.  
  110.   ;Send event to group leader
  111.   Widget_Control, self.Group_Leader, Send_Event = {Processing, 0L, 0L, 0L, ok, 2}
  112.  
  113. End
  114. ;--------------------------------------------------------------------------------
  115.  
  116.  
  117. ;----UpdateObject--------------------------------------------------------------------------------------
  118. ;
  119. ;
  120. ;
  121.  
  122. Pro AS2PI_tpl::UpdateObject
  123.  
  124.   ;Obtain AviStack2's object reference (stored in uValue of its TLB)
  125.   Widget_Control, self.Group_Leader, Get_uValue = AviStack2
  126.   
  127.   ;Get channels flag (0: gray scale, 1: RGB, 2,3,4: R,G,B (only one channel processed, gray scale)) 
  128.   self.channels = AviStack2->GetProperty(/Channels) * AviStack2->GetProperty(/aChan)
  129.   ;Maximum pixel value (for scaling the data for correct display).
  130.   self.maxval = AviStack2->GetProperty(/maxval)
  131.  
  132.   self.wx = AviStack2->GetProperty(/dx_)
  133.   self.wy = AviStack2->GetProperty(/dy_)
  134.  
  135.   ;---- Add paremters here that you want to update ------------------------
  136.  
  137.  
  138.  
  139.  
  140. End
  141. ;------------------------------------------------------------------------------------------------------
  142.  
  143.  
  144.  
  145.  
  146.  
  147. ;----Map----------------------------------------------------------------------------------------
  148. ;
  149. ;  Method to map the GUI (managed by AviStack2)
  150. ;
  151.  
  152. Pro AS2PI_tpl::Map, Auto = Auto, Preset = Preset, Close = Close, WorkPath = WorkPath
  153.  
  154.  
  155.   If Keyword_Set(Close) Then Begin
  156.  
  157.     Widget_Control, self.tlb, Map = 0
  158.     
  159.     ;Clear the pointer data to save memory (optional)
  160.     self->ClearData
  161.  
  162.   EndIf Else Begin
  163.  
  164.     ;Obtain the most recent parameters and data from AviStack2
  165.     self->UpdateObject
  166.  
  167.     ;Update workpath when TLB is mapped (optional)
  168.     self.workPath = WorkPath
  169.  
  170.     ;Send help text to help label in main GUI (optional)
  171.     Widget_Control, self.Group_Leader, Get_uValue = AviStack2
  172.     AviStack2->Event, {Info, 0L, 0L, 0L, (*self.lang).info}
  173.  
  174.  
  175.     ;---- Update of TLB ----------------------------------------
  176.     ;
  177.     ;  Add your code here to update the TLB
  178.     ;
  179.  
  180.  
  181.  
  182.     ;-----------------------------------------------------------
  183.       
  184.     ;Display data (optional)
  185.     self->ShowFrame
  186.  
  187.     ;Update the widgets of your TLB (optional)
  188.     self->UpdateWidgets
  189.    
  190.     ;Map the TLB
  191.     Widget_Control, self.tlb, Map = 1
  192.   
  193.   EndElse
  194.  
  195. End
  196. ;-------------------------------------------------------------------------------------------------
  197.  
  198.  
  199.  
  200.  
  201.  
  202. ;----ShowFrame-------------------------------------------------------------------
  203. ;
  204. ;  Method shows the current frame and draws the alignment points
  205. ;
  206.  
  207. Pro AS2PI_tpl::ShowFrame
  208.  
  209.   Widget_Control, /Hourglass
  210.  
  211.   ;---- Add you code here ----------------------
  212.   
  213.  
  214.  
  215.   
  216.   ;---------------------------------------------
  217.  
  218.   Widget_Control, Hourglass = 0
  219.  
  220. End
  221. ;---------------------------------------------------------------------------------------------------
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228. ;-----Event-----------------------------------------------------------------------------------------
  229. ;
  230. ;  Method to process the events
  231. ;
  232.  
  233. Pro AS2PI_tpl_Event, ev
  234.  
  235.   Widget_Control, ev.top, Get_uValue = self
  236.   self->Event, ev
  237.  
  238. End
  239.  
  240.  
  241. Pro AS2PI_tpl::Event, ev
  242.  
  243.   Widget_Control, ev.id, Get_uValue = info
  244.  
  245.   Case info.type Of
  246.  
  247.     'Cancel': self->Finished, 0
  248.     
  249.     'OK': self->Finished, 1
  250.     
  251.     Else:
  252.   
  253.   EndCase
  254.   
  255.   
  256. End
  257. ;----------------------------------------------------------------------------------------------------
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264. ;----UpdateWidgets--------------------------------------------------------------------------------------------------
  265. ;
  266. ;  Method to update the widgets of your TLB
  267. ;
  268.  
  269. Pro AS2PI_tpl::UpdateWidgets
  270.  
  271.   ;---- Add your code here --------------
  272.  
  273. End
  274. ;-------------------------------------------------------------------------------------------------------------------
  275.  
  276.  
  277.  
  278.  
  279.  
  280. ;----BuildGUI-----------------------------------------------------------------------------------------------------------
  281. ;
  282. ;  Method builds the GUI of the object
  283. ;
  284. ;  Keywords:
  285. ;    Group_Leader: The group leader's widget ID (must be present)
  286. ;
  287.  
  288. Pro AS2PI_tpl::BuildGUI, Group_Leader = Group_Leader
  289.  
  290.   ;Store the group leader's ID
  291.   self.Group_Leader = Group_Leader
  292.  
  293.   ;Restore initial GUI geometry
  294.   self->Settings, /Restore
  295.  
  296.   ;---- TLB definition ------------------------------------------------------------------------------------------
  297.   ;
  298.   ;  Do not change this. The object reference is stored in the user value of the TLB.
  299.   ;    If you want to store your own user values, create a base widget as a child of the TLB and
  300.   ;    store it there.
  301.   ;
  302.  
  303.   self.tlb = Widget_Base(Group_Leader = self.Group_Leader, xOffset = self.xOffset, yOffset = self.yOffset, $
  304.                          Map = 0, uValue = self, /Column, Tlb_Frame_Attr = 11, $
  305.                          /Floating, Title = (*self.lang).title, /Base_Align_Center)
  306.   
  307.   
  308.   
  309.   bdx = 200
  310.   
  311.   ;OK and cancel buttons
  312.   ocBase = Widget_Base(self.tlb, /Row, /Grid_Layout, xPad = 0, yPad = 0)
  313.   okButton = Widget_Button(ocBase, Value = (*self.lang).ok, uValue = {type: 'OK'}, xSize = bdx/2-2)
  314.   caButton = Widget_Button(ocBase, Value = (*self.lang).cancel, uValue = {type: 'Cancel'}, xSize = bdx/2-2)
  315.  
  316.   ;---- Add your widgets here -----------------------------------------------------------------------------------
  317.   
  318.     ;The user value of your widgets must be a structure and contain at least the tag "Type" to identify
  319.     ; the event in the event handler uValue = {Type: 'Name', ...}. See predefined widgets above.  
  320.   
  321.   
  322.   ;--------------------------------------------------------------------------------------------------------------
  323.   
  324.  
  325.   Widget_Control, self.tlb, /Realize
  326.  
  327.   xManager, 'AS2PI_tpl', self.tlb, /No_Block
  328.  
  329. End
  330. ;---------------------------------------------------------------------------------------------------------------
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. ;----SetProperty---------------------------------------------------------------
  338. ;
  339. ;  Method that allows AviStack2 to pass data to the object.
  340. ;  fit: 100% or scaled display of the data
  341. ;  fp: Conversion parameters to convert device to
  342. ;       scaled coordinates for each fit mode [1, f]
  343. ;  data: Movie frame data
  344. ;
  345.  
  346. Pro AS2PI_tpl::SetProperty, fp = fp, $
  347.                             fit = fit, $
  348.                             color = color
  349.  
  350.  
  351.   If N_Elements(fp)      GT 0 Then  self.fp      = fp
  352.   If N_Elements(fit)     GT 0 Then  self.fit     = fit
  353.   If N_Elements(color)   GT 0 Then  self.color   = color
  354.  
  355. End
  356. ;----------------------------------------------------------------------------------
  357.  
  358.  
  359.  
  360.  
  361.  
  362. ;----GetProperty-----------------------------------------------------------------
  363. ;
  364. ;  Method to access data of the object
  365. ;
  366.  
  367. Function AS2PI_tpl::GetProperty, draw_events = draw_events, $
  368.                                  wx = wx, $
  369.                                  wy = wy, $
  370.                                  fit = fit, $
  371.                                  color = color, $
  372.                                  title = title, $
  373.                                  prog = prog
  374.  
  375.   ;---- Draw events ------------------------------------------
  376.   ;
  377.   ;  Allows AviStack2 to check if the object is to receive
  378.   ;   draw events from the main display.
  379.  
  380.   If Keyword_Set(draw_events) Then Return, self.draw_events
  381.  
  382.  
  383.   ;---- Frame display ----------------------------------------
  384.   ;
  385.   ;  These parameters must all be accessible by AviStack2
  386.   ;  to ensure a proper display of data.
  387.   ;
  388.   ;  wx, wy: The 100% dimensions of the displayed data
  389.   ;  fit: Use 100% or scaled display (managed by AviStack2) 
  390.   ;  color: Color mode selected for the object (managed by AviStack2)
  391.   ;
  392.   
  393.   If Keyword_Set(wx)      Then Return,  self.wx
  394.   If Keyword_Set(wy)      Then Return,  self.wy
  395.   If Keyword_Set(fit)     Then Return,  self.fit
  396.   If Keyword_Set(color)   Then Return,  self.color
  397.  
  398.  
  399.   ;---- Title ------------------------------------------
  400.   ;
  401.   ;  Allows AviStack2 to obtain the plug-in's title
  402.   ;  Used as entry for the "Extras" menu.
  403.   ;
  404.  
  405.   If Keyword_Set(title)   Then Return, (*self.lang).title
  406.  
  407.  
  408.   ;---- Progress flag-----------------------------
  409.   If Keyword_Set(prog)    Then Return,  self.prog
  410.  
  411.   ;---- Frame data -------------------------------------
  412.   ;
  413.   ;  Allows AviStack2 to display modified frame data
  414.   ;
  415.  
  416. End
  417. ;------------------------------------------------------------------------------
  418.  
  419.  
  420.  
  421.  
  422.  
  423. ;----Init------------------------------------------------------------------------------------
  424. ;
  425. ;  Method initializes the object
  426. ;
  427. ;  Keywords (must all be present):
  428. ;    setPath: The path (string) of the settings file (.ass)
  429. ;    cLang: The string of the selected language (e.g. 'ENG' for English)
  430. ;    LangDir: The path (string) where the language files are located 
  431. ;
  432.  
  433. Function AS2PI_tpl::Init, setPath = setPath, $
  434.                           cLang = cLang, $
  435.                           LangDir = LangDir
  436.  
  437.   ;---- Progress flag ------------------------------------
  438.   ;
  439.   ;  Accessed by AviStack2 (::GetProperty)
  440.   ;  AS2 then knows when it is OK to map/use this object
  441.   ;
  442.   
  443.   self.prog = 100
  444.  
  445.   ;---- Settings and language library paths -------------------------------
  446.   ;
  447.   ;  Stores the paths to the settings file (.ass)
  448.   ;  and the language library file (.xml) and the language acronym.
  449.   ;
  450.   
  451.   self.setPath = setPath
  452.   self.langDir = langDir
  453.   self.cLang = cLang
  454.  
  455.  
  456.   ;---- Lnaguage data--------------------------------------------------------------------------
  457.   ;
  458.   ;  You must create a XML language library for your object and its TLB.
  459.   ;
  460.   
  461.   file = 'AS2PI_Tpl'
  462.   clFile = LangDir + file + '_' + cLang + '.xml'
  463.   ceFile = LangDir + file + '_ENG.xml'
  464.   lFiles = File_Search(clFile, count = true)
  465.   If true Then self.lang = Ptr_New(GetLng(lFiles)) Else self.lang = Ptr_New(GetLng(ceFile))
  466.  
  467.  
  468.  
  469.   ;---- Settings file name -------------------------------
  470.   ;
  471.   ;  The name of the file where the initial settings
  472.   ;  of your object and its TLB are stored
  473.   ;
  474.  
  475.   self.ini = setPath + file + '.ass'
  476.  
  477.  
  478.   ;---- Init pointers -----------
  479.   ;  
  480.   ;   (add more pointers here if necessary)
  481.   ;
  482.  
  483.  
  484.  
  485.   ;---- Draw events from main display -----------------------------------
  486.   ;
  487.   ;  Object uses draw events (set to 1 if your object is to be able to
  488.   ;    receive draw events from the main display)
  489.   ;
  490.   
  491.   self.draw_events = 0
  492.  
  493.   Return, 1
  494.  
  495. End
  496. ;------------------------------------------------------------------------------------------------
  497.  
  498.  
  499.  
  500.  
  501.  
  502. ;----Object definition--------------------------------------------------
  503. ;
  504. ;  Add your own variables here.
  505. ;  Add the IDs of the widgets you add to the TLB or use otherwise (only
  506. ;   required of you want to update these widgets).
  507. ;
  508.  
  509. Pro AS2PI_tpl__define
  510.  
  511.   void = {AS2PI_tpl, $
  512.  
  513.           setPath: '', $           ;Path to the settings file
  514.           langDir: '', $           ;Path to the objects language library
  515.           cLang: '', $             ;Language acronym
  516.           workPath: '', $          ;Current work path (movie location)
  517.           
  518.           prog: 0L, $              ;Progress flag. Accessed by AviStack2 to know when the object is allowed to be mapped.
  519.  
  520.           ini: '', $               ;File Name: Settings data
  521.           draw_events: 0, $        ;Flag: Receive draw events from main display
  522.  
  523.           tlb: 0L, $               ;Base ID: Top level base
  524.             xOffset: 0L, $         ;Tlb geometry
  525.             yOffset: 0L, $
  526.  
  527.           group_leader: 0L, $      ;The ID of the group leader
  528.  
  529.           color: 0L, $             ;Color mode flag (managed by AviStack2)
  530.           fit: 0L, $               ;Frame fit mode (managed by AviStack2)
  531.           fp: FltArr(2), $         ;Fitting parameters (managed by AviStack2)
  532.           wx: 0L, $                ;100% x-size of a frame to be displayed
  533.           wy: 0L, $                ;100% y-size of a frame to be displayed
  534.  
  535.           channels: 0, $           ;Channels flag
  536.           maxval: 0d, $            ;Maximum pixel value
  537.  
  538.           lang: Ptr_new()}
  539.  
  540. End